<?php

/**
 * scabish框架自身组件快速调用类
 * @author keluo<pycorvn@yeah.net>
 * @since 2015-01-31
 */
class SCS {

    /**
     * url管理组件
     * @param boolean cached 是否缓存对象
     * @return SCUrl
     */
    public static function url($cached = true) {
        static $instance = null;
        if (is_null($instance))
            $instance = new SCUrl();
        return $cached ? $instance : new SCUrl();
    }

    /**
     * 请求管理组件
     * @return SCRequest
     */
    public static function request() {
        static $instance = null;
        if (is_null($instance))
            $instance = SCRequest::instance();
        return $instance;
    }

    /**
     * cookie管理组件
     * @param boolean cached 是否缓存对象
     */
    public static function cookie($cached = true) {
        static $instance = null;
        if (is_null($instance))
            $instance = new SCCookie();
        return $cached ? $instance : new SCCookie();
    }

    /**
     * 配置管理组件
     */
    public static function config() {
        static $instance = null;
        if (is_null($instance))
            $instance = SCConfig::instance();
        return $instance;
    }

    /**
     * 表模型CURD组件
     * @param string $table 表名(无前缀)
     * @param string $connect 数据库连接标识
     */
    public static function curd($table, $connect = null) {
        return new SCCurd($table, $connect);
    }

    /**
     * 数据库操作组件
     * @param string $connect
     * @return SCModel
     */
    public static function db($connect = null) {
        return new SCDb($connect);
    }

    /**
     * 分页组件
     * @return SCPage
     */
    public static function page() {
        static $instance = null;
        if (is_null($instance))
            $instance = SCPage::instance();
        return $instance;
    }

    /**
     * 身份标识组件
     * @param boolean cached 是否缓存对象
     */
    public static function identify($cached = true) {
        static $instance = null;
        if (is_null($instance))
            $instance = new SCIdentity();
        return $cached ? $instance : new SCIdentity();
    }

    /**
     * 会话管理组件
     * @return SCSession
     */
    public static function session() {
        static $instance = null;
        if (is_null($instance))
            $instance = new SCSession();
        return $instance;
    }

    /**
     * 数据验证组件
     * Example:
        {
            $validator = SCS::validator($input);
            $validator->addValidation("check field", "$validator::ValidateCommand.$command", "message");
            if ($validator->ValidateForm($input)) {
                 //TODO
            } else {
                 $error_hash = $validator->GetErrors();
            }
     *  }
     * @return SCSession
     */
    public static function validator() {
        return new FormValidator();
    }

}
